データ分析を便利にするJupyter notebookとPandas
こんにちは、小澤です。
今回は、Jupyter notebookとPandasの導入的な話をしようと思います。
とは?の話
Jupyter notebookもPandasもすでに「とは?」を書く必要がないくらい有名どころかもしれませんが一応書いておきます。 とはいえ、今回はこんなものがあるよというご紹介程度の内容となるので、この「とは?」がメインコンテンツとなります。
どちらもpipからインストール可能ですが、Anacondaを利用すると、グラフ描画用のmatplotlibも別途インストールする必要がなくなるため、 今回はAnaconda3-4.2.0を利用しているものとします。
Jupyter notebookとは
ブラウザ上で、REPLのようなインタラクティブにプログラムを実行するためのものです。
Jupyter notebookを立ち上げるとブラウザから画像のような環境にアクセスできます。 セルと呼ばれる単位でプログラムを記述していき実行すると結果はそのすぐ下に表示されます。 セル内には任意の長さのプログラムをかけますし、好きなだけ数を増やすことも減らすこともできます。また、一度実行したものを変更することも可能です。
notebookeはipynbの形式(実体はjson)で保存されるため、他者と共有することも可能ですし、 githubやgistに上げると以下のようにレンダリングしてくれます。
また、同様のものでIPython notebookと呼ばれることもありますが、こちらは旧名称です。 かつてはPythonのみが利用可能でしたが、現在ではほかの言語でも利用できるようになっており、名称もPythonに特化したものではなくJupyterとなっています。
簡単に使ってみると以下のような感じになります。
プログラムを実行するには、各セルの中でCtrl-Enterを押します。 その直後に実行結果が表示されます。
画像中に含まれる文章の部分はmarkdonwで記述しています。 特定のセルをプログラムではなく、markdownを記述する用に変更するには上部メニューから「Code」になっている部分を「Markdown」にへんこうします。
セルの追加には上部メニュー「+」ボタンを押します。
Jupyterではこれらや、その他様々な操作にショートカットキーを利用できます。 利用可能なショートカットキー一覧はメニューのキーボードのようなアイコンをクリックすることで確認できます。
また、Jupyterではmatplotlibという、Pythonのグラフ描画用ライブラリを利用して作成したグラフをインラインで表示させたり、 markdown中にMathJaxを使った数式の表示も可能です。
その他、ここでの紹介は割愛しますが、JupyterにはExtensionという機能を拡張するものがあり、それを導入することで様々なことが可能になります。 気になった方は調べてみてください。
Pandasとは
Pandasはデータフレーム形式で、データを扱うものになります。 データフレームとは、RDBのテーブルやCSV, Excelのテーブルのような形式です。 列方向に各項目を保持して、行方向に実際に観測されたデータを記録していきます。ここの値は行列の交差した部分になります。
実際にpandasでデータを読み込んでみるとこの形式で保持していることがわかります(pandasのコードについては後ほど解説します)。
$ python Python 3.5.2 |Anaconda 4.2.0 (x86_64)| (default, Jul 2 2016, 17:52:12) >>> import pandas as pd >>> pd.read_csv('iris.data', names=['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'species']) sepal_length sepal_width petal_length petal_width species 0 5.1 3.5 1.4 0.2 Iris-setosa 1 4.9 3.0 1.4 0.2 Iris-setosa 2 4.7 3.2 1.3 0.2 Iris-setosa 3 4.6 3.1 1.5 0.2 Iris-setosa 4 5.0 3.6 1.4 0.2 Iris-setosa 5 5.4 3.9 1.7 0.4 Iris-setosa 6 4.6 3.4 1.4 0.3 Iris-setosa 7 5.0 3.4 1.5 0.2 Iris-setosa 8 4.4 2.9 1.4 0.2 Iris-setosa ... ...
PandasをJupyterから利用するとテーブル形式に整形して表示してくれます。
pandasはこのようにテーブルのような形式でデータを扱うため、データに対する操作もSQLとの対比で行うのがわかりやすいかと思います。 いくつかの操作に関して、pandasではどのように行うのかを見てみましょう。
まずは、列の絞り込みです。 SQLでは「SELECT petal_length, petal_width, species FROM ...」のように必要な列のみを選択する方法です。
単一カラムで絞り込む場合は、文字列で列名を指定します。
iris['species']
この例では結果がテーブルの形式で整形されていません。 このように、列が1つの場合に利用可能な型として、DataFrameではなくSeriesという型で表すことができます。
配列で列名を渡すことで複数選択可能です。
iris[['sepal_length', 'species']]
SQLでいう、LIMITとOFFSETを利用したい時には、配列のように数値で範囲を指定します。
iris[47:53]
UNIONのような操作はappendが利用できます。
# appendを実行するためにテーブルを2つに分ける iris1 = iris[:75] iris2 = iris[75:] # appendの実行 iris1.append(iris2)
JOINを実現するmergeを利用します。
# mergeの動きを見るためにテーブルを2つに分ける iris1 = iris[['sepal_length', 'species']] iris2 = iris[['sepal_width', 'species']] # mergeの処理を実行 pd.merge(iris1, iris2, on='species')
GROUP BY相当の処理にはgroupby関数と、どのような集計を行うかの関数を実行します。
iris.groupby('species').mean()
Pandasでは、これら個々の処理を組み合わせていくことで、様々なデータフレームに対する操作を行うことが可能です。 また、plot系の関数を呼び出すことで、matplotlibを利用したデータの可視化も可能です。
iris.plot.scatter('petal_length', 'petal_width')
終わりに
今回はJupyter notebookとPandasの紹介をしました。 これらにはまだまだ様々な機能がありますが、今回は紹介として簡単な機能のみにとどめておきます。 より詳しく知りたくなった方は
などが参考になるかと思います。